De-duplication systems and methods for application-specific data

ABSTRACT

Content-aware systems and methods for improving de-duplication, or single instancing, in storage operations. In certain examples, backup agents on client devices parse application-specific data to identify data objects that are candidates for de-duplication. The backup agents can then insert markers or other indictors in the data that identify the location(s) of the particular data objects. Such markers can, in turn, assist a de-duplication manager to perform object-based de-duplication and increase the likelihood that like blocks within the data are identified and single instanced. In other examples, the agents can further determine if a data object of one file type can or should be single-instanced with a data object of a different file type. Such processing of data on the client side can provide for more efficient storage and back-end processing.

RELATED APPLICATIONS

This application is a continuation of U.S. patent application Ser. No.12/724,292, filed Mar. 15, 2010, which claims the benefit of priorityunder 35 U.S.C. §119(e) of U.S. Provisional Patent Application No.61/165,071, filed Mar. 31, 2009, and is a continuation-in-partapplication of U.S. patent application Ser. No. 12/145,342, filed Jun.24, 2008, now U.S. Pat. No. 8,219,524, each of which is herebyincorporated herein by reference in its entirety.

BACKGROUND

1. Field

Embodiments of the invention relate to data management and, inparticular, to systems and methods for reducing duplicate data in acomputer system.

2. Description of the Related Art

With the increased reliance on computer systems to store criticalinformation, the importance of protecting information has grown. As aresult, certain storage systems receive an identification of a file toprotect and then create one or more secondary copies, such as backupfiles, containing the contents of the file. These secondary copies canthen later be used to restore the original data should anything happento the original data.

In corporate environments, protecting information is generally part of aroutine process that is performed for many computer systems within anorganization. For example, a company might back up critical computingsystems related to e-commerce such as databases, file servers, webservers, and so on as part of a daily, weekly, or monthly maintenanceschedule. The company may also protect computing systems used by each ofits employees, such as those used by an accounting department, marketingdepartment, engineering department, and so forth.

Although each computer system contains certain unique information, manysystems may contain very similar information. For example, although acomputing system used by a marketing employee and a computing systemused by an engineering employee will generally contain uniqueinformation created by each employee in the course of their work, bothcomputing systems will likely have the same operating system installed,with thousands of identical or similar files used by the operatingsystem. Similarly, both computing systems will likely have at least somesimilar application programs installed, such as a word processor,spreadsheet, Internet browser, and so on. Both systems may also havesimilar corporate information. For example, each employee may have anelectronic copy of an employee manual distributed by the company.Information other than files may also be identical or similar betweensystems. For example, user settings and preferences may have similardefault values on each system and application programs may containsimilar templates on each system that are stored as application-specificinformation. As another example, several employees may have received acopy of the same email, and the email may be stored in each employee'selectronic mailbox.

As a result of the amount of redundant information in an organization,secondary copies of an organization's information are often very largeand can require the purchase of expensive storage devices and storagemedia. The restoration of data in the event of data loss is also slowedby the large size of the secondary copies. As the size of secondarycopies increases, locating and restoring information requires moreactions to be taken. For example, it may be necessary to search manytapes or other media to find the correct secondary copy. The greatquantity of storage media, such as tapes, may mean that some secondarystorage media has been moved offsite requiring that it first beretrieved before information can be recovered from it. Each of thesefactors increases the cost of protecting information and the timerequired to recover information in the event of data loss. Quickrecovery of information is often critical to today's businesses, and anyadditional delay can affect business operations and customers'satisfaction with the business.

SUMMARY

Single instancing in a data management system is the process ofattempting to store only a single instance of a file or data object.Certain objects are often stored in large, monolithic files that areintended to be read only by the application that created them. Forexample, a MICROSOFT EXCHANGE email server stores email messages in oneor more large data files that typically hold thousands of differentusers' mailboxes. As another example, a database server often storestables, forms, reports, and other data objects in one or two large datafiles that provide persistence for the entire database.

Thus, typical data management systems are only able to perform datamanagement operations on the large data file, rather than the dataobjects themselves. In the case of the email server, a given electronicmail application may generate multiple email messages that all differ,but which all contain the same attachment. Prior systems may not be ableto differentiate these messages, and thus each would be stored with theattachment. Further, if two files had different properties or metadata,such prior systems would store both files, even though the data theycontain are identical and differ only by their metadata.

In view of the foregoing, certain embodiments of the invention include ade-duplication system for managing application-generated data objects.The system comprises a first backup agent executing on a first clientdevice and a de-duplication module executing on a computing device. Thefirst backup agent is configured to, in response to a storage operationrequest: parse first application-specific data of the first clientdevice that is the subject of the storage operation request, the firstapplication-specific data comprising a plurality of first data objectshaving different sizes; identify, based at least on an application thatgenerated the first application-specific data, one or more of theplurality of first data objects of the first application-specific datato be considered for de-duplication, wherein the one of more first dataobjects comprises less than the entire first application-specific data;and insert at least one indicator in the first application-specific datathat identifies at least one location of the one or more first dataobjects within the first application-specific data. The de-duplicationmodule is in communication with the first backup agent to receive thefirst application-specific data and is configured to: process each ofthe one or more data objects; and, based on said processing, determineif a duplicate copy of any of the one or more first data objects existsin a storage device.

In certain embodiments, a method is disclosed for managingapplication-generated data objects. The method comprises receiving afirst storage operation request for first data generated by a firstapplication executing on a first client device, the first datacomprising a plurality of first data objects having non-uniform sizes.The method further comprises parsing the first data to identify one ormore of the plurality of first data objects to be considered forde-duplication. The method also includes inserting at least oneindicator in the first data that identifies at least one location of theone or more first data objects within the first data and processing eachof the one or more first data objects to determine if a duplicate copyof the one or more first data objects exists in at least one storagedevice. For each of the one or more first data objects, if a duplicatecopy does not exist in the storage device, the method stores the firstdata object in the at least one storage device. Otherwise, a stub fileand/or a pointer is stored in place of the first data object in thestorage device.

In certain embodiments, a method is disclosed for managingapplication-generated data objects. The method includes receiving afirst storage operation request for first data generated by a firstapplication executing on a first client device, the first datacomprising a plurality of first data objects. The method also, includesparsing the first data to identify one or more of the first data objectsto be considered for de-duplication and receiving a second storageoperation request for second data generated by a second application, thesecond data comprising a plurality of second data objects, and thesecond data having a different file format than the first data. Themethod further includes parsing the second data to identify one or moreof the plurality of second data objects to be considered forde-duplication. In addition, the method includes inserting in the firstdata and/or the second data an indicator that denotes, based on thefirst and second file formats, that the one or more first data objectsshould not be single instanced with the one or more second data objects.

In certain embodiments, a system is disclosed for managingapplication-generated data objects. The system includes means forreceiving a first storage operation request for first data generated bya first application executing on a first client device, the first datacomprising a plurality of first data objects having differing sizes. Thesystem also includes means for parsing the first data to identify one ormore of the first data objects to be considered for de-duplication,wherein the one of more first data objects comprises less than theentire first data; means for inserting at least one indicator in thefirst data that identifies at least one location of the one or morefirst data objects within the first data; and means for processing eachof the one or more first data objects to determine if a duplicate copyof the first data object exists in at least one storage device. Inaddition, the system includes means for (i) storing each of the one ormore first data objects in the storage device that does not have aduplicate copy and (ii) storing a stub and/or a pointer in place of eachof the one or more first data objects that does have a duplicate copy inthe at least one storage device.

In certain embodiments, a method is disclosed for managing data in acomputer system. The method comprises accessing first data, the firstdata comprising at least one first data object in a first file format,and accessing second data, the second data comprising at least onesecond data object in a second file format, the second file format beingdifferent than the first file format. The method further comprisesinserting in at least one of a copy of the first data and a copy of thesecond data an indicator that denotes that, based on the first andsecond file formats, the at least one first data object cannot or shouldnot be single instanced with the at least one second data object.

In certain embodiments, the method is performed by one or morecontent-aware data agents residing on one or more client devices. Suchagents can advantageously identify portions of data to be backed up,archived or otherwise stored to be considered for possiblede-duplication.

In certain embodiments, a de-duplication system is disclosed formanaging application-generated data objects. The system comprises afirst backup agent executing on a first client device, the first backupagent being configured to, in response to a storage operation request:(i) parse first application-specific data of the first client devicethat is the subject of the storage operation request, (ii) identify oneor more first data objects of the first application-specific data to beconsidered for de-duplication, and (iii) insert an indicator in a copyof the application-specific data that identifies the one or more firstdata objects to be considered for de-duplication.

For purposes of summarizing the disclosure, certain aspects, advantagesand novel features of the inventions have been described herein. It isto be understood that not necessarily all such advantages may beachieved in accordance with any particular embodiment of the invention.Thus, the invention may be embodied or carried out in a manner thatachieves or optimizes one advantage or group of advantages as taughtherein without necessarily achieving other advantages as may be taughtor suggested herein.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 is a block diagram that illustrates components of a singleinstancing system in accordance with one embodiment of the invention.

FIG. 2 is a block diagram that illustrates an example data filecontaining data objects.

FIG. 3A is a block diagram that illustrates the flow of data during astorage operation, in one embodiment.

FIG. 3B is a block diagram that illustrates components of acontent-aware de-duplication system in accordance with certainembodiments of the invention.

FIG. 3C illustrates exemplary fields of a chunk file usable with thede-duplication system of FIG. 3B in accordance with certain embodimentsof the invention.

FIG. 4 is a flow diagram that illustrates processing of a storageoperation manager component of the single instancing system, in oneembodiment.

FIG. 5 is a flow diagram that illustrates processing of the singleinstancing system to determine whether a data object is unique, in oneembodiment.

FIG. 6 is a flow diagram that illustrates processing of the storageoperation manager component to restore data, in one embodiment.

FIG. 7 is a block diagram that illustrates an environment in which thesingle instancing system may be configured to operate.

FIG. 8 is a flow diagram that illustrates copying a remote file or dataobject in the environment of FIG. 7

FIG. 9 is a block diagram that illustrates another environment in whichthe single instancing system may be configured to operate.

FIG. 10 is a flow diagram that illustrates copying a remote file or dataobject in the environment of FIG. 9.

FIG. 11 is a block diagram that illustrates another environment in whichthe single instancing system may be configured to operate.

FIG. 12 is a flow diagram that illustrates copying a remote file or dataobject in the environment of FIG. 11.

In the drawings, the same reference numbers and acronyms identifyelements or acts with the same or similar functionality for ease ofunderstanding and convenience. To easily identify the discussion of anyparticular element or act, the most significant digit or digits in areference number refer to the Figure number in which that element isfirst introduced (e.g., element 604 is first introduced and discussedwith respect to FIG. 6).

DETAILED DESCRIPTION OF CERTAIN EMBODIMENTS

The headings provided herein are for convenience only and do notnecessarily affect the scope or meaning of the claimed invention.

Overview

Described in detail herein are single instancing systems that moreintelligently identify multiple copies of the same data object. Forexample, certain embodiments of the single instancing system recognizedocuments, files, or data objects produced by multiple differentapplications, and can parse through and identify those data objectscommon among data blocks within a file, and thereby only copy a singleinstance of those common data objects. Further embodiments parse theproprietary data formats of many applications and can identify dataobjects related to the application, even when those data objects arestored in large, monolithic data files. In addition, if two documents,files, or data objects are substantially similar, but have differingmetadata, such as different user permissions, embodiments of the singleinstancing system can store a single instance of the data object, butretain all differing versions of the metadata (for example, such as byretaining the different user permissions). When a client requests thedata object, the single instancing system returns appropriate metadatabased on the identity of the client or other information.

According to other embodiments of the single instancing system, ifmultiple clients and associated media agents are in remote locations,the single instancing system may perform backup of data to a local,single instance database or data store at each remote location. Then,the single instancing system may use continuous data replication (CDR)to copy the data contained in each local data store to a centrallocation.

In further embodiments, content-aware systems and methods are disclosedfor improving de-duplication/single instancing in storage operations. Incertain examples, backup agents on client devices parseapplication-specific data to identify data objects that are likelycandidates for de-duplication. The backup agents can then insert markersor other indictors in the data that identify the location(s) of theparticular data objects. Such markers can, in turn, assist ade-duplication manager to perform object-based de-duplication andincrease the likelihood that like blocks are identified within the data.In other examples, the agents can further determine if a data object ofone file type can, or should, be single-instanced with a data object ofa different file type. Such processing of data on the client side canprovide for more efficient storage and back-end processing in a datastorage system.

The invention will now be described with respect to various embodiments.The following description provides specific details for a thoroughunderstanding of, and enabling description for, these embodiments of theinvention. However, one skilled in the art will understand that theinvention may be practiced without these details. In other instances,well-known structures and functions have not been shown or described indetail to avoid unnecessarily obscuring the description of theembodiments of the invention.

The terminology used in the description presented below is intended tobe interpreted in its broadest reasonable manner, even though it isbeing used in conjunction with a detailed description of certainspecific embodiments of the invention. Certain terms may even beemphasized below; however, any terminology intended to be interpreted inany restricted manner will be overtly and specifically defined as suchin this Detailed Description section.

Unless described otherwise below, embodiments of the invention may bepracticed with various data processing systems. Thus, the constructionand operation of the various blocks shown in FIG. 1 need not bedescribed in further detail herein to make and use the invention,because such blocks will be understood by those skilled in the relevantart. One skilled in the relevant art can readily make any modificationsnecessary to the blocks in FIG. 1 (or other embodiments or figures)based on the detailed description provided herein.

FIG. 1 is a block diagram that illustrates components of a singleinstancing system 100, in one embodiment. The single instancing system100 contains a file identification component 110, an identifiergeneration component 120, an identifier comparison component 130, asingle instance database component 140, a restored file cache component150, a storage operation manager component 160, an application dataextraction component 170, and a remote synchronization component 180.

The file identification component 110 identifies files or data objects,such as in response to a storage operation. As used herein, the terms“file” or “data object” are broad terms and are used in their ordinarysense and include, without limitation, any collection or grouping ofbytes of data that can be viewed as one or more logical units. Forexample, a file could be a computer file on a file system (for example,a word processing file, a spreadsheet file, a database file, etc.) Asanother example, a data object could be a file or within a file (e.g.,an embedded object within a word processing file, a cell or a row in aspreadsheet file, a table or an entry in a table in a database file, astring, an array, or any other collection of electronic information).Moreover, data objects need not be limited to units of the same size butcan comprise, in certain embodiments, multiple objects of differingsizes. The file identification component 110 may retrieve additionalinformation related to a file or data object, such as its size, that isused by the single instancing system 100 to uniquely identify the dataobject.

When the file identification component 110 identifies a file, theapplication data extraction component 170 determines whether the filecontains additional data objects. For example, the file may be anapplication-specific container (for example, a database file), thatstores data objects such as documents, email messages, and othercollections of data. The application data extraction component 170 woulddetermine that each of the data objects within the application-specificcontainer should be identified.

The identifier generation component 120 generates a substantially uniqueidentifier of a file or data object that is used to determine if anotherfile or data object already stored by the single instancing systemmatches the file or data object used to generate the substantiallyunique identifier. The identifier comparison component 130 performscomparisons of identifiers of various files or data objects to determineif the files or data objects contain similar data (for example, theidentifier comparison component 130 can compare substantially uniqueidentifiers of two or more files or data objects to determine if thefiles or data objects contain similar data).

The single instance database component 140 is a data store that containsentries identifying files or data objects managed by the singleinstancing system 100, and may also contain supplemental informationassociated with files or data objects, such as a substantially uniqueidentifier, a path, a location, a reference count, a file size or otherinformation. The restored file cache component 150 provides anintermediate location that may be used by the single instancing system100 during a restore operation to hold instances of files or dataobjects for which additional references may need to be restored.

For example, during a restore operation, the single instancing systemmay restore files or data objects to the cache and then transfer thefiles or data objects to a target location of the restore operation.When the single instancing system 100 encounters a reference to a singleinstance copy of a file or data object, the single instancing system 100may consult the restored file cache component 150 or an index. Thesingle instancing system 100 does so to determine if the file or dataobject is present in the cache before attempting to restore the file ordata object from another location, such as from secondary storage (forexample, a tape).

The storage operation manager component 160 coordinates storageoperations and invokes the other components of the single instancingsystem 100 as needed to perform requested storage operations. Forexample, the storage operation manager component 160 may include anapplication used by an administrator to manage the single instancingsystem 100. The storage operation manager component 160 may alsomaintain indexes of the data objects and each of the references to thosedata objects through the single instancing system 100, as well aspending operations on the data objects that are part of a datamanagement plan of an organization implementing the single instancingsystem 100.

The remote synchronization component 180 performs single instancingbetween a remote location and a central location, such as between anenterprise or organization having a headquarters or central office andone or more satellite offices or remote offices, or vice-versa. Theremote synchronization component 180 uses the techniques described infurther detail herein to determine whether a file or data object shouldbe copied from the remote location to the central location.

FIG. 1 and the discussion herein provide a brief, general description ofa suitable computing environment in which the invention can beimplemented. Although not required, embodiments of the invention aredescribed in the general context of computer-executable instructions,such as routines executed by a general-purpose computer, e.g., a servercomputer, wireless device or personal computer. Those skilled in therelevant art will appreciate that the invention can be practiced withother communications, data processing, or computer systemconfigurations, including: Internet appliances, hand-held devices(including personal digital assistants (PDAs)), wearable computers, allmanner of cellular or mobile phones, multi-processor systems,microprocessor-based or programmable consumer electronics, set-topboxes, network PCs, mini-computers, mainframe computers, and the like.Indeed, the terms “computer,” “host,” and “host computer” are generallyused interchangeably herein, and refer to any of the above devices andsystems, as well as any data processor.

Aspects of the invention can be embodied in a special purpose computeror data processor that is specifically programmed, configured, orconstructed to perform one or more of the computer-executableinstructions explained in detail herein. Embodiments of the inventioncan also be practiced in distributed computing environments where tasksor modules are performed by remote processing devices, which are linkedthrough a communications network, such as a Local Area Network (LAN),Wide Area Network (WAN), or the Internet. In a distributed computingenvironment, program modules may be located in both local and remotememory storage devices.

Embodiments of the invention may be stored or distributed oncomputer-readable media, including magnetically or optically readablecomputer discs, hard-wired or preprogrammed chips (e.g., EEPROMsemiconductor chips), nanotechnology memory, biological memory, or otherdata storage media. Indeed, computer implemented instructions, datastructures, screen displays, and other data under embodiments of theinvention may be distributed over the Internet or over other networks(including wireless networks), on a propagated signal on a propagationmedium (e.g., an electromagnetic wave(s), a sound wave, etc.) over aperiod of time, or they may be provided on any analog or digital network(packet switched, circuit switched, or other scheme). Those skilled inthe relevant art will recognize that portions of the invention mayreside on a server computer, while corresponding portions reside on aclient computer such as a mobile or portable device, and thus, whilecertain hardware platforms are described herein, embodiments of theinvention are equally applicable to nodes on a network.

Single Instancing

Reducing or eliminating redundant instances of data resulting from astorage operation is sometimes referred to here as de-duplication or“single instancing,” because what would traditionally be stored as manyinstances of the same data is reduced to as few as one. Redundantinstances may be detected and reduced at several locations or timesthroughout the operation of the system that will now be described. Theseembodiments are provided only as examples, and are not intended to be anexhaustive list of the way in which the system can be implemented.

In some embodiments, the single instancing system performs singleinstancing of data at a computing system that contains or originallygenerated the data, such as a client computing system. For example, aclient computing system that is providing data that is the target of astorage operation may receive a request from the single instancingsystem to provide a substantially unique identifier (for example, a hashvalue, message digest, checksum, digital fingerprint, digital signatureor other sequence of bytes that substantially uniquely identifies thefile or data object) of each file or data object included in the storageoperation.

The word “substantially” is used to modify the term “unique identifier”because algorithms used to produce hash values may result in collisions,where two different files or data objects result in the same hash value.However, depending upon the algorithm or cryptographic hash functionused, collisions should be suitably rare and thus the identifiergenerated for a file or data object should be unique throughout thesingle instancing system. As an alternative to the single instancingsystem generating the substantially unique identifier, the clientcomputing system may itself generate substantially unique identifiersfor each file or data object that is stored on the client computingsystem on an ongoing or other basis. When a storage operation isrequested, the single instancing system determines if another file ordata object exists with a substantially unique identifier matching thatof the one provided by the client computing system. If the singleinstancing system is already aware of a similar file or data object,then the client computing system does not need to send the redundantfile or data object to a secondary storage location or destination.

Rather than operating only at the file level, in some embodiments, thesingle instancing system may also operate at a lower level ofgranularity by enumerating data objects within files of understoodtypes. For example, the single instancing system may read and parse datafiles from email servers (for example, MICROSOFT EXCHANGE email servers,Sendmail email servers, etc.), database servers (for example, MICROSOFTSQL Server database servers, ORACLE database servers, etc.), web servers(for example, MICROSOFT IIS web servers, APACHE web servers, etc.), wordprocessing applications (for example, MICROSOFT WORD, COREL WORDPERFECT,etc.), spreadsheet applications (for example, MICROSOFT EXCEL, APPLENUMBERS, etc.), and many others and enumerate the data objects withinthese files.

The single instancing system may then generate a substantially uniqueidentifier for each data object within the file, rather than each file,and store this substantially unique identifier in the single instancedatabase component 140 or other index. The single instancing system mayalso store information about the associations between the data objectsand their containing files. Therefore, the single instancing systemenables data storage operations such as searching, backing up,restoring, replicating, copying and so forth to be performed at the dataobject level. Enabling data storage operations at the data object levelenables the single instancing system to store data using much less spacethan traditional single instancing storage systems, because filescontaining data objects are likely to have redundant data objects, ofwhich only one instance or copy need be stored.

For example, the data of two email servers that each contain similaremail messages in a large data file can be stored in much less spacethan if the entire data files of each email server were to be stored,because the data files are likely to contain redundant email messages,of which only one instance or copy need be stored. This is becausetraditional single instancing systems would determine that the two datafiles differed and would store both data files, thereby consuming morestorage space.

FIG. 2 illustrates an example data file produced by an email server. Thedata file 210 holds containers 220 of data related to each user that hasa mailbox on the email server. Each container 220 holds email messages230 for a specific user, and each email message 230 may contain one ormore attachments 240. Email messages are often forwarded to many users,and the users may be assigned to the same or different email servers.The single instancing system may know or understand the structure of thedata file 210 before performing any single instancing operations, asdiscussed in more detail with respect to FIGS. 3B and 3C.

For example, the single instancing system may identify the type of thedata file based on the data file's filename extension. The identifieddata file type may be used to identify a format or specification thatdescribes the structure (e.g., at which bytes specific data is stored,its particular encoding, etc.) of the data file. This knowledge of thestructure enables the application data extraction component 170 to parsethe data file 210, identify containers 220, and extract email messages230 or attachments 240 from each container 220. Alternatively, the datafile 210 may contain metadata, a header or other information thatdescribes its data structure.

The application data extraction component 170 can obtain this metadataor other information, which enables it to parse the data file 210,identify containers 220, and extract email messages 230 or attachments240 from each container 220. The single instancing system can then storeonly a single instance or copy of the extracted email messages 230 orattachments 240 that are similar. By operating on the data at the dataobject level, the single instancing system provides substantial benefitby identifying the redundancy of data objects stored within the datafiles and providing single instancing of the individual data objects.

In some embodiments, the single instancing system or another systemperforms additional operations on the data after single instancing hasoccurred. For example, another system may encrypt backup data that isbeing stored offsite to prevent unauthorized parties from accessing thedata. Another system may also compress the data to reduce its size. Thesingle instancing system enables these additional operations to beperformed more efficiently, because there is less data on which toperform these additional operations after redundant data has beenreduced or eliminated.

Single Instanced Archive and Backup Data Using Single Storage Policy

One example of a single instancing system employs a single storagepolicy or data store. A storage policy is generally a virtual containerwith preferences that contains a set of rules for data retention of dataobjects associated with the storage policy. The single instancing systemin this example stores single instance data in a single location and ina manner to ensure that any relevant, unique data is retained, but onlya single instance of common data is copied to the data store. Notably, asingle instancing agent creates, updates, or maintains a single instancedatabase or index that represents or stores the substantially uniqueidentifiers of each file or data object. The single instance database orindex is associated with a single storage policy that is separate fromone or more data stores that store the data copies. A single storagepolicy may represent a storage location that includes existing data, aswell as new data that has been compared to the existing data andidentified as being unique.

FIG. 3A is a block diagram that illustrates the flow of data during astorage operation, in one embodiment. Data is initially stored on aserver 310 or other source of data. A storage policy 320 or otherconfiguration information specifies a storage operation to be performedon the data. For example, the storage policy 320 may specify that thedata stored on the server 310 is to be backed up daily to tape. Theapplication of the storage policy 320 causes the backup to occur,resulting in the creation of the data copy 330. The data copy 330 maycontain many redundant files or other data objects.

A media agent 340 manages the data copy 330, and creates a singleinstance copy 350. The single instance copy 350 is a copy in which atleast some of the redundant files or data objects have been removed. Themedia agent 340 uses the methods described herein to eliminate redundantinstances of files or data objects contained in the data copy 330, andto produce the single instance copy 350. The single instance copy 350may then be stored on tape or other media.

The single instancing system may employ one or more specialized singleinstancing agents. For example, as described below, the singleinstancing system may employ application agents associated with types ofapplications, metadata agents for analyzing metadata,encryption/compression agents, and so forth. Alternatively, a singleagent employing all of the functions described herein may be employed.These agents operate on all types of data, including documents, files,data objects, or any data blocks.

An application agent associated with each type of application mayanalyze incoming or previously stored data to identify redundant data.For example, an email agent analyzes incoming or previously storedemails, including attachments to emails, to identify duplicateattachments. The email agent provides a first instance of an email withan attachment to the storage policy, but for subsequent emails havingthe same attachment, the email agent strips them of their attachmentsand stores them with a stub or pointer to the previously storedattachment.

A metadata agent analyzes files or data objects for similarities indata, but differences in metadata that is associated with the files ordata objects. For example, two files may have the same data, butseparate permissions, properties, access control lists (ACLs), operatingsystem metadata (e.g., UNIX and WINDOWS metadata), application-specificmetadata, ownership metadata, anti-virus information, security metadata,other metadata, combinations of the same or the like. The metadata agentascertains that the two files contain the same data but have differingmetadata, and thus stores only one instance of the file, but two or moreinstances of the associated metadata, as well as information about theassociations between the metadata, the providers of the files and thefiles. Such embodiments of the invention can advantageously allow forsingle instancing, or de-duplication, of files or data objects acrossdifferent operating systems.

When a client requests the file, the single instancing system providesthe file to the client with the appropriate instance of the metadatabased on the identity of the requestor. For example, a data file may bestored on a user computer with permissions restricting access to thedata file to the user of that computer, and the same data file may bestored on a second computer with permissions restricting access to thedata file to an administrator of the single instancing system. The userwill still be able to access the data file from the single instancestore even though the user is not an administrator of the singleinstancing system. This is because the single instancing system will usethe metadata from the file from the user's computer to ascertain thatthe user has the permissions needed to access the file, and permit therequested access to the user.

As another example, two files may have the same data, but differentproperties, such as the creation date or access date. The metadata agentascertains that the two files contain the same content but havedifferent properties. The metadata agent thus stores only one instanceof the file, but two or more instances of the properties, as well asinformation about the associations between the metadata, the providersof the files and the files. Because an association between the providerof the file and the file is stored, when a client requests the file, thesingle instancing system can provide the file with the proper metadatato the client.

In yet other embodiments, one or more agents on one or more clientdevices can perform one or more functions of the above-describedmetadata agent. Embodiments of agents usable with embodiments of theinvention are described in more detail below, with particular referenceto FIGS. 3B and 3C.

The single instancing system can single instance both non-encrypted andencrypted data received from client computers. Each client computer maygenerate a substantially unique identifier for the file or data objectbefore the file or data object is encrypted. The client computer doesthis before encryption because an encrypted file or data object wouldalmost certainly result in a substantially unique identifier that isdifferent from a substantially unique identifier generated from the fileor data object before encryption. Alternatively, a client computer couldgenerate a substantially unique identifier for a file or data objectafter the file or data object is encrypted. An encryption agent maycompare the substantially unique identifiers to identify identical filesor data objects, and thus only store one instance of them.

In some embodiments, the single instancing system determines whether tostore an instance of an encrypted or unencrypted file (or data object,but file is used in this and the following paragraphs discussingencryption for brevity) based on whether the files are encrypted usingthe same encryption scheme, whether the encrypted files can be decryptedby the single instancing system, and/or other factors.

For example, consider the following three situations involving encryptedfiles: 1) where the single instancing system has previously stored aninstance of a file that is encrypted and a request is made to storeanother instance of the file that is also encrypted; 2) where the singleinstancing system has previously stored an instance of a file that isunencrypted and a request is made to store another instance of the filethat is encrypted; and 3) where the single instancing system haspreviously stored an instance of a file that is encrypted and a requestis made to store another instance of the file that is unencrypted.Metadata associated with the file is typically not encrypted. Moreover,information about the encryption scheme (for example, what public key isused to encrypt the file) may be provided as metadata to the singleinstancing system.

For the first situation, if the two file instances are encrypted usingthe same encryption scheme (for example, using the same public key), thesingle instancing system can avoid storing the second instance of thefile. If the two files are encrypted using different encryption schemes,the single instancing system stores the second instance of the file.This is because the single instancing system has to be able to providethe second instance of the file to the requestor when requested.

Alternatively, if both encryption schemes are known to the singleinstancing system (for example, using two different public keys of thesingle instancing system), the single instancing system can avoidstoring the file. This is because the single instancing system candecrypt the first instance of the file and re-encrypt it using theencryption scheme used to encrypt the second instance of the file.However, this decryption and re-encryption may be too computationallyexpensive, depending upon various factors (for example, the time neededto decrypt and re-encrypt the file, the algorithm, etc.), and so thesingle instancing system may simply store the second instance of thefile.

For the second situation, if the second instance of the file isencrypted using an encryption scheme that is known to the singleinstancing system (for example, using a public key of the singleinstancing system), the single instancing system can avoid storing thesecond instance of the file. This is because, when the provider of thesecond encrypted instance requests the file, the single instancingsystem can retrieve the first unencrypted instance, encrypt it using theknown encryption scheme and provide it to the requestor. However, ifsuch encryption is too computationally expensive, the single instancingsystem may simply store the second encrypted instance of the file. Ifthe second instance of the file is encrypted using an encryption schemethat is not known to the single instancing system, the single instancingsystem stores the second instance of the file. This is because thesingle instancing system has to be able to provide the second encryptedinstance of the file to the requestor when requested.

For the third situation, if the first instance of the file is encryptedin such a way that it can be decrypted by the single instancing system,the single instancing system can avoid storing the second unencryptedinstance of the file. This is because, when the provider of the secondunencrypted instance requests the file, the single instancing system canretrieve the first encrypted instance, decrypt it, and provide it to therequestor. However, if such decryption is too computationally expensive,the single instancing system may simply store the second unencryptedinstance of the file. If the first instance of the file is encrypted insuch a way that it cannot be decrypted by the single instancing system,the single instancing system stores the second unencrypted instance ofthe file. This is because the single instancing system has to be able toprovide the second unencrypted instance of the file to the requestor.

The single instancing system may also handle compressed files. Eachclient computer may generate a substantially unique identifier for thefile or data object before the file or data object is compressed. Theclient computer does this before compression because a compressed fileor data object would almost certainly result in a substantially uniqueidentifier that is different from a substantially unique identifiergenerated from the file or data object before compression.Alternatively, a client computer could generate a substantially uniqueidentifier for a file or data object after the file or data object iscompressed. A compression agent may compare the substantially uniqueidentifiers to identify identical files or data objects, and thus onlystore one of them.

In some embodiments, the single instancing system determines whether tostore an instance of a compressed or uncompressed file (or data object,but file is used in this and the following paragraphs discussingcompression for brevity) based on whether the files are compressed usingthe same compression scheme, whether the compressed files can bedecompressed by the single instancing system, and/or other factors.

For example, consider the following three situations involvingcompressed files: 1) where the single instancing system has previouslystored an instance of a file that is compressed and a request is made tostore another instance of the file that is also compressed; 2) where thesingle instancing system has previously stored an instance of a filethat is uncompressed and a request is made to store another instance ofthe file that is compressed; and 3) where the single instancing systemhas previously stored an instance of a file that is compressed and arequest is made to store another instance of the file that isuncompressed. Metadata associated with the file is typically notcompressed. Moreover, information about the compression scheme (forexample, what compression algorithm is used to compress the file) may beprovided as metadata to the single instancing system.

For the first situation, if the two file instances are compressed usingthe same compression scheme (for example, using the same compressionalgorithm), the single instancing system can avoid storing the secondinstance of the file. Otherwise, the single instancing system stores thesecond instance of the file. However, if the second instance of the fileis compressed using a different compression scheme, the singleinstancing system may avoid storing the second instance of the file, ifthe single instancing system is able to decompress the first instance ofthe file and recompress the first instance of the file using thedifferent compression scheme. If the single instancing system is notable to do so, the single instancing system stores the second instanceof the file. However, this decompress and recompression may be toocomputationally expensive, depending upon various factors (for example,the time needed to decompress and recompress the file, the algorithm,etc.), and so the single instancing system may simply store the secondinstance of the file.

For the second situation, if the second instance of the file iscompressed using a compression scheme that is known to the singleinstancing system (for example, using a known compression algorithm),the single instancing system can avoid storing the second instance ofthe file. This is because, when the provider of the second compressedinstance requests the file, the single instancing system can retrievethe first uncompressed instance, compress it using the known compressionscheme and provide it to the requestor. However, if such compression istoo computationally expensive, the single instancing system may simplystore the second compressed instance of the file. If the second instanceof the file is compressed using a compression scheme that is not knownto the single instancing system, the single instancing system stores thesecond instance of the file. This is because the single instancingsystem has to be able to provide the second compressed instance of thefile to the requestor when requested.

For the third situation, if the first instance of the file is compressedin such a way that it can be decompressed by the single instancingsystem, the single instancing system can avoid storing the seconduncompressed instance of the file. This is because, when the provider ofthe second uncompressed instance requests the file, the singleinstancing system can retrieve the first compressed instance, decompressit, and provide it to the requestor. However, if such decompression istoo computationally expensive, the single instancing system may simplystore the second uncompressed instance of the file. If the firstinstance of the file is compressed in such that it cannot bedecompressed by the single instancing system, the single instancingsystem stores the second uncompressed instance of the file. This isbecause the single instancing system has to be able to provide thesecond uncompressed instance of the file to the requestor.

The single instancing system may be configurable to reduce processingtime, transmission bandwidth, and the like with small files. Forexample, an administrator-configurable value would allow theadministrator to configure the single instancing system to ignore filesor data objects below a given size. For example, any file or data objectbelow a certain threshold (for example, one kilobyte) may simply bestored, and a substantially unique identifier would not determined forit. Any file or data object greater than the threshold (for example, onekilobyte) would then be single instanced. An administrator may adjustthis threshold up or down. As another example, the single instancingsystem may allow the administrator to configure it to always singleinstance files or data objects of a certain type or category (forexample, executable files or modules may always be single instanced ifthey rarely change).

Alternatively, embodiments of the single instancing system may allow theadministrator to never single instance files or data objects of acertain type or category (for example, log files may never be singleinstanced, because they typically change quite frequently) or comparedata objects of certain different data formats.

In yet other embodiments, the single instancing system can comprisemultiple single instancing, or de-duplication, components (e.g.,databases) for processing and/or storing single instance copies 350 ofdata from different applications and/or file formats. For example, incertain embodiments, a file when processed (e.g., checked in) by aSHAREPOINT application can be fundamentally altered such that it differsfrom the same file when processed in an EXCHANGE server environment.

In view of the foregoing, certain embodiments of the single instancingsystem can determine that files or data objects from these twoapplications should not be considered together for single instancingsince the copies of the same file will contain different data. Rather,the single instancing system can comprise different components that areeach dedicated to single instance processing of the data from the twoapplications. For example, in certain embodiments, a first singleinstance database can allocated for SHAREPOINT data, while a secondsingle instance database can be allocated for EXCHANGE data.

Moreover, the same single instancing system components can be dedicatedfor single instancing data of different applications that process datain a similar manner. For instance, in certain embodiments, the secondsingle instance database described above could be allocated for bothEXCHANGE and file system data, while the first single instance databaseis reserved for SHAREPOINT data.

In such embodiments, storage space can be advantageously allocated onone or more storage devices based on the expected amount of singleinstanced, or de-duplicated, data from the different applications. Forexample, a main or primary de-duplication database (e.g., having mediawith a faster access time) can be set aside for de-duplication of filesor data objects from one or more applications or application formatsproducing a relatively large amount of data within a system, while asecondary de-duplication database can be reserved for data of one ormore applications or application formats producing a relatively smallamount of data in the system.

In certain embodiments, as discussed below with reference to FIGS. 3Band 3C, agents operating on one or more client devices can be used foridentifying such application data that should or should not beconsidered together for possible de-duplication. Such identificationcould be performed, for example, when processing the client data to besent to be backed up, archived or otherwise stored in secondary storage.

The single instancing system may further associate timestamps with thefiles or data objects or with their generated substantially uniqueidentifiers. A timestamp may indicate the time at which the file or dataobject was created, last accessed or modified, or the time at which thesingle instancing system generated the substantially unique identifierfor it, or the time at which the file or data object was stored by thesingle instancing system. The single instancing system may do so todetermine whether a file or data object is substantially newer thananother file or data object already stored in the single instancingsystem.

For example, two files or data objects may have the same substantiallyunique identifier, meaning that they contain the same data. The singleinstancing system may compare the timestamp of the first, previouslystored, file or data object with that of the second file or data object.If the timestamp of the second file or data object is substantiallynewer than the timestamp of the first file or data object, the singleinstancing system may nonetheless store the second file or data object,even though it is duplicative of a file or data object that is alreadystored.

In this context, substantially newer means that the age (as determinedby its timestamp) of the second file or data object is less than the ageof the first, previously stored, file or data object by a certain amountor more (configurable by an administrator). The single instancing systemcould then prune off older versions as the data ages and is migrated toother storage, such as longer-term storage. For example, a first file ordata object could have a timestamp indicating that its age is tenmonths. A second file or data object could have a timestamp indicatingthat its age is three months. If the administrator has configured theamount to be six months, then the second file or data object issubstantially newer than the first file or data object, because the ageof the second file or data object is less than the age of the first fileor data object by more than the configured amount. Therefore, the singleinstancing system would store the second file or data object, and thefirst file or data object could be migrated to longer-term storage, suchas to tape.

The single instancing system may be employed in any variety ofarchitectures. For example, it may be employed with heterogeneousstorage hardware, and thus is not reliant on a specific hardwareplatform to perform all of the single instancing functions. Instead,multiple, different data storage platforms may be employed for storingdata under the storage policies. Further, the architecture may be tieredor federated wherein one server manages multiple cells (and each ofthose cells in turn may manage lower tier cells). In some embodiments,the cells may be arranged in hierarchies or organized in configurationssuch as those described in U.S. patent application Ser. No. 12/060,186,filed Mar. 31, 2008, published as U.S. Patent Application PublicationNo. 2008-0250204 A1, the entirety of which is hereby incorporated hereinby reference.

The single instancing system may employ many other functions. Forexample, it may employ content indexing agents to index the content alldata blocks. These content indexes may then be searched to permit usersto readily locate desired data objects. Further details regardingcontent indexing may be found in U.S. patent application Ser. No.11/694,869, filed Mar. 30, 2007, published as U.S. Patent ApplicationPublication No. 2008-0091655 A1, the entirety of which is herebyincorporated herein by reference.

FIG. 3B is a block diagram that illustrates components of acontent-aware de-duplication, or single-instancing, system 360,according to certain embodiments of the invention. In general, thede-duplication system 360, in certain embodiments, advantageouslyutilizes knowledge of file content to improve the de-duplication processby identifying the location(s) of files or data objects, such as datablocks, that are eligible and/or should be considered together forde-duplication.

In certain embodiments, the de-duplication system 360 provides anend-to-end, block-based and/or file-based de-duplication system that canextend across multiple tiers of secondary storage (including disk andtape) and/or encompass reduction of stored data across multiple backups,archives, clients and/or platforms. Embodiments of the de-duplicationsystem 360 further employ application-aware or content-awarede-duplication processes to more accurately find and reduce commonpatterns in data across disparate applications, operating systems, filesystems and/or data types.

As illustrated, the content-aware de-duplication system 360 comprises ade-duplication manager 362 that performs de-duplication of data receivedfrom one or more client devices 364. In certain embodiments, thede-duplication manager 362 can comprise the single instancing system100, or one or more components thereof. For example, the de-duplicationmanager 362 can receive secondary copies (e.g., backup, migration and/orarchive copies) of data from the client devices 364 and store at leastportions of the secondary copies on the storage device 366.

A de-duplication database 368 can utilize one or more tables or otherdata structures to store substantially unique identifiers of dataobjects (e.g., files, blocks) that have already been stored on thestorage device 366. If a copy or instance of a data object received bythe de-duplication manager 362 has already been stored on the storagedevice 366, the de-duplication database 368 can be used to avoid sendingan additional copy of the same data to the storage device 366. Examplesof similar single instancing configurations and methods usable withembodiments of the invention are further disclosed in U.S. ProvisionalPatent Application No. 61/100,686, filed Sep. 26, 2008, which is herebyincorporated herein by reference in its entirety.

As further illustrated by FIG. 3B, each of the clients 364 comprises oneor more agents 370 operating thereon, or associated therewith, forperforming data and/or storage tasks related to the corresponding client364. In certain embodiments, the agents 370 are data agents configuredto generate secondary copies of data stored on, or accessible by, thecorresponding client 364 for storage on the storage device 366. Forinstance, in certain embodiments, the agents 370 can advantageously beconfigured to translate or convert data on the client devices 364 into aparticular backup format for facilitating de-duplication by thede-duplication manager 362.

In certain further embodiments, the agents 370 compriseapplication-specific, or content-aware, modules that are configured toaccess and process one or more particular data formats and/or dataassociated with a particular application. In certain embodiments, theagents 370 are advantageously used to process data within a databasefile, blob data and/or data encapsulated in another data format. Forinstance, each agent 370 can be aware of the various files, folders,registry files and/or system resources that are impacted by a particularapplication. In certain embodiments, different individual agents 370 maybe designed to handle MICROSOFT EXCHANGE data, SQL SERVER data, LOTUSNOTES data, MICROSOFT WINDOWS 2000 file system data, SHAREPOINT data,and other types of data.

In certain embodiments, multiple agents 370 may be treated as separateagents even though they reside on the same client 364. In otherembodiments, the separate agents may be combined to form a virtual agentfor performing storage operations related to a specific application.Also, although the agents 370 are illustrated as executing on the clientdevices 364, it will be understood that embodiments of the agents 370can also be configured to remotely access data stored on the clientdevices 364 through one or more application programming interfaces(APIs), remote procedure calls (RPCs) or the like.

In certain embodiments, the agent 370 is configured to perform datamanagement or storage operations in accordance with one or more storagepolicies or other preferences. The storage polices and/or preferencesmay include, but are not limited to, information regarding storagelocations, relationships between system components, network pathways,retention policies, data characteristics, compression or encryptionrequirements, preferred system components, combinations of the same orthe like.

In certain embodiments, each agent 370 can prepare the secondary copy ofthe data to facilitate subsequent de-duplication of data objects withinthe backup data. Such embodiments can advantageously improve the speedof de-duplication since the de-duplication preparation can be integratedwith the normal backup process and since the agents 370 can useknowledge of both specific file formats of the client data and thede-duplication process occurring on the back end of the de-duplicationsystem 360.

In certain embodiments, the agent 370 identifies the locations of dataobjects within a file that should be considered for de-duplication. Forinstance, the agent 370 can indicate (e.g., via offsets) where thede-duplication manager 362 should start and/or stop considering data forpossible de-duplication.

For instance, suppose the agent 370 is instructed to process the datafile 210 (see FIG. 2), which was generated by an email server, to bebacked up. In certain embodiments, because the agent 370 is familiarwith the data format and structure of the data file 210, which containsmultiple email messages 230 and attachments 240 in multiple usermailboxes 220, the agent 370 can identify to the de-duplication manager362 where to begin within the data file 210 the de-duplicationevaluation process.

For example, the agent 370 may insert one or more markers within thedata file 210 that identify location(s) where a data object (e.g., thebody of an email message, an attachment) begins and/or ends. In certainembodiments, such identification information can be advantageously usedby the de-duplication manager 362 to more quickly identify portions ofone or more data files that may be more likely to contain duplicate data(e.g., attachments between multiple email messages). In certainembodiments, the marker can further identify the type of data associatedwith the data object.

In embodiments of the invention that utilize block-level de-duplication,the information inserted by the agent 370 can advantageously assist thede-duplication manager 362 to know where to begin the de-duplicationcomparison of data such that a higher likelihood of detecting duplicatedata is achieved. For instance, the agent 370 can process metadataand/or other file information regarding a particular data file to detectwhere logical or natural divisions within the file should be identified(e.g., an offset of a mail data file at which an attachment begins). Asa result, it is more likely that like blocks are detected since thede-duplication manager 362 can proceed with its comparison and analysisof data blocks in corresponding locations of the data.

For example, suppose two different email messages to be backed upcontain the same data object as an attachment, but the bodies of theemail messages differ in size. If a block-level de-duplication manager362 begins its comparison process at the beginning of each email messageby comparing set de-duplication block sizes (e.g., 32 KB), thede-duplication manager 362 may not detect a match of the attachments ofthe two email messages since the attachments may be located at differentoffsets within the respective email messages (e.g., 40 KB and 46 KB).

However, using the identifying information generated by the agents 370,the de-duplication manager 362 can be instructed to begin theblock-level comparison at the respective offsets within the two emailmessages whereat the particular attachments begin. As a result, suchembodiments can advantageously increase the likelihood that duplicatedata will be detected between data of like files (e.g., generated fromthe same application).

Although the agent 370 has been described as processing particular typesof data (e.g., mail data), it will be understood that other embodimentsof the invention can be used with a variety of different types of dataand that different agents 370 can be associated with the different typesof data to identify possible common duplicate data therein. Forinstance, a first agent can be used to identify data objects within anEXCHANGE server data file, while a second agent can be used to identifydata objects within file system data such that the de-duplicationmanager 362 can more easily detect duplicate data objects between thetwo types of data.

In yet other embodiments, the agent 370 can generate substantiallyunique identifiers, as discussed above with respect to FIG. 1, for oneor more files or data objects to be backed up.

FIG. 3C illustrates exemplary fields of a chunk file 380 usable with thede-duplication/single instancing systems disclosed herein. Inparticular, the chunk file 380 can be used for transmitting client datato be backed up or archived on one or more storage devices. Moreover,the chunk file 380 can advantageously comprise one or more file markersor other information added by one or more content-aware agents 370 thatidentify data to be considered for possible de-duplication. Forexemplary purposes, the chunk file 380 will be described with referenceto the components of the de-duplication system 360 of FIG. 3B.

The chunk file 380 includes a chunk header 382 comprising metadataregarding the chunk file 380. The chunk file 380 further comprises aplurality of tag headers 384 that are each associated with a datapayload 386 containing the actual data to be backed up. In certainembodiments, each tag header 384 comprises metadata (e.g., size, datatype, or the like) regarding the data in the corresponding payloadsection 386.

As shown, each of the tag headers 384 comprises a de-duplicationidentifier 388. In certain embodiments, the identifier 388 indicateswhether or not one or more data objects within the corresponding payload386 should be considered for de-duplication. For instance, in certainembodiments, the identifier 388 comprises a single bit that indicateswhether or not the de-duplication manager 362 should consider the dataof the corresponding payload 386 for de-duplication.

In yet other embodiments, the identifier 388 can comprise a file markeror other data structure that demarcates payload data for possiblede-duplication. For instance, the identifier 388 may identify particularoffsets within the payload 386 whereat the de-duplication manager 362should start and/or stop considering data objects for de-duplication. Incertain embodiments, the identifier 388 can comprise a tag, a pointer,an index or table entry, a flag, a bit, a header, combinations of thesame or the like.

In yet other embodiments, the identifier 388 can identify data objectsthat can or cannot be single instanced with other data objects (e.g.,based on file types). In such embodiments, identifiers 388 may indicatethat data of a particular payload 386 should be considered forde-duplication with reference to a first de-duplication database, whiledata of a second payload 386 should be considered for de-duplicationwith reference to a second de-duplication database.

In certain embodiments, the agent 370 inserts the identifier 388 in thechunk file 380. In certain embodiments, one or more agents 370 can alsoseparate data of different applications and/or formats that should notbe considered together for single instancing into separate payloads(e.g., under different tag headers) or separate chunk files.

Although FIG. 3C and the accompanying disclosure refer to chunk filesfor transmitting data, other embodiments of the invention can utilizedifferent means or methods for transmitting data in which data thereinis selectively identified for possible de-duplication. For instance, theagents 370 can be configured to insert similar file markers, bits and/orother data structures in a data stream being sent to the de-duplicationmanager 362 or other de-duplication reader/listener for considerationfor de-duplication. In yet other embodiments, the described chunk file380 can be used in archiving, migration, and/or other data storagemethods that generate secondary copies of data.

Determining Data Object Similarity

Various methods of determining if one file or data object is similar(e.g., two instances of the same data) to another file or data objectwill now be described. However, those of ordinary skill in the art willrecognize that many other methods besides those described herein may beused to achieve similar results.

In some embodiments, the single instancing system determines if twofiles or data objects are similar by performing a binary comparison. Forexample, a first file or data object can be compared byte by byte with asecond file or data object, or portions of the first file or data objectcan be compared with portions of the second file or data object. If eachbyte of the compared data in each file or data object matches, then thetwo files or data objects are identical and therefore similar.Otherwise, the two files or data objects do not match and are nottreated as similar.

In some embodiments, the single instancing system determines if twofiles or data objects are similar by creating a digest or fingerprint ofthe data contained in each file or data object. For example, as storageoperations are performed, the single instancing system may perform acryptographic hash on each file or data object to create a digest of thefile or data object. The single instancing system compares the digest ofthe file or data object with stored digests created for other files ordata objects. If the digests of two files or data objects match, thenthe single instancing system may consider the files or data objects tobe identical. The single instancing system can use any suitable hashingalgorithm, such as SHA512. For applications that create data fileshaving embedded data objects, the single instancing system identifiesthe embedded data objects, and determines the similarity of each dataobject with other data objects found either within the same data file orin other data files or stores managed by the single instancing system.

FIGS. 4-6 are representative flow diagrams that depict processes used insome embodiments. These flow diagrams do not show all functions orexchanges of data, but instead they provide an understanding of commandsand data exchanged under the single instancing system. Those skilled inthe relevant art will recognize that some functions or exchange ofcommands and data may be repeated, varied, omitted, or supplemented, andother (less important) aspects not shown may be readily implemented.

FIG. 4 is a flow diagram that illustrates the processing of the storageoperation manager component 160 of the single instancing system in oneembodiment. The storage operation manager component 160 is invoked whena storage operation that creates a copy of a file is requested (e.g.,when backing up the application file (block 400)). In block 410, thestorage operation manager component 160 identifies data objects withinthe file to be copied, such as by using information about theapplication that created the file and the format used by the applicationto store data objects.

For example, the application may provide an object model that thestorage operation manager component 160 can invoke to enumerate objectswithin the file, or the storage operation manager component 160 mayunderstand the format used by the application for storing objects in thefile. An application author, manufacturer or third party may alsoprovide a module for parsing the application file that the storageoperation manager component 160 can invoke. In this way, the applicationauthor, manufacturer or third party can provide access to the dataobjects within the file without exposing the actual format used to thirdparties.

In certain embodiments, the storage operation manager component 160further identifies files or data objects from different applicationsthat should be considered separately for de-duplication. For instance,the storage operation manager component 160 can identify one or morefiles or data objects from a first application or data format to beassociated with a first de-duplication database, while identifying oneor more files or data objects from a second application or data formatto be associated with a second de-duplication database. In yet otherembodiments, one or more agents 370 can perform one or more of thefunctions described above with respect to blocks 400 and/or 410.

In block 415, the storage operation manager component 160 selects thefirst identified data object. In block 420, the storage operationmanager component 160 determines whether the data object is unique, orif the storage manager component has previously copied the data object.For example, the storage operation manager component 160 may compute adigest in the manner described herein, and compare the digest to thedigests of previously copied data objects to determine if the dataobject is an instance of a previously copied data object. In decisionblock 430, if the data object is unique, then the storage operationmanager component 160 continues at block 450, else the storage operationmanager component 160 continues at block 440. In block 440, the storageoperation manager component 160 adds a reference (e.g., to an index ofdata managed by the single instancing system, such as by incrementing areference count in the index) to the already backed up instance of thedata object, and then continues to block 460. In block 450, thecomponent stores the unique data object. In decision block 460, if thestorage operation manager component 160 identified more data objectswithin the file, then the storage operation manager component 160 loopsto block 415 to select the next data object, else the storage operationmanager component 160 completes.

FIG. 5 is a flow diagram that illustrates the processing of the singleinstancing system to determine whether a file or data object is unique,in one embodiment. These blocks may be invoked by the storage operationcomponent 160, such as when performing a storage operation as describedin FIG. 4 or at other times. In block 510, the identifier generationcomponent 120 generates a substantially unique identifier of the file ordata object that is the target of the storage operation. In block 520,the file identification component 110 gathers (for example, by queryingthe file system of a client) additional information about the file ordata object, such as the file or data object's size, securityinformation, or other attributes. In block 530, the identifiercomparison component 130 determines if the substantially uniqueidentifier of the file or data object and any supplemental informationmatches that of any existing file or data object tracked by the singleinstance database component 140.

In decision block 540, if the data objects match, then the singleinstancing system continues at block 550, otherwise the singleinstancing system continues at block 570. In block 550, the singleinstancing system reports to the entity that invoked the storageoperation manager component 160 that the file or data object is notunique. In block 560, the single instancing system updates thesubstantially unique identifier reference count tracked by the singleinstance database component 140 and then concludes. In block 570, thesingle instancing system reports to the entity that invoked the storageoperation manager component 160 that the file or data object is unique.In block 580, the single instancing system adds the file or dataobject's substantially unique identifier and other information to thelist of files and data objects tracked by the single instance databasecomponent 140. The process then concludes.

FIG. 6 is a flow diagram that illustrates the processing of the storageoperation manager component 160 to restore data, in one embodiment. Thesingle instancing system invokes the storage operation manager component160 when it receives a request, for example, to restore data. In block610, the storage operation manager component 160 receives a request torestore data. In block 620, the storage operation manager component 160selects the next file or data object referred to by the request. Forexample, the request may identify ten files or data objects, and thestorage operation manager component 160 selects the first file or dataobject on which to perform the following blocks.

In decision block 630, if the selected file or data object is areference to an instance of a file or data object stored somewhere else,then the storage operation manager component 160 continues at block 640,else the storage operation manager component 160 continues at block 650.In block 640, the storage operation manager component 160 locates thereferenced instance of the file or data object and continues to block655. In block 655, the storage operation manager component 160 restoresthe file or data object from the referenced instance of the file or dataobject. In block 650, the storage operation manager component 160restores the file or data object directly from the file or data object.In decision block 660, if there are more files or data objects referredto by the received request, then the storage operation manager component160 loops to block 620 to select the next file or data object on whichto perform these blocks, else the storage operation manager component160 completes.

Single Instance Continuous Data Replication

Where multiple computing systems containing data that is to be singleinstanced are located remotely from a single instancing database,various system configurations may be employed to avoid transferring datathat is common to the remote multiple computing systems to the singleinstancing database. Three example configurations are described herein.Under a first configuration, a single instancing database is maintainedat a first location and at each remote location (e.g., a secondlocation, a third location, etc.). De-duplicated information in thesingle instancing database at each remote location is transferred to thesingle instancing database at the first location.

Under a second configuration, a single instancing database is maintainedat a first location, and a computing system at each remote location(e.g., a second location, a third location, etc.) sends queries to thesingle instancing database at the first location to identify what datato transfer to the single instancing database. Under a thirdconfiguration, each computing system at each remote location (e.g., asecond location, a third location, etc.) queries a single instancingdatabase at a first location before transferring any data to the singleinstancing database. Each of these configurations is discussedseparately below. In the discussed configurations, the example of acentral or home office with one or more remote or satellite offices isused, where each remote office includes one or more computing systems.Although the terminology used to discuss these configurations implies acertain geographical positioning of computing systems, the singleinstancing system described herein may be used in a wide variety ofconfigurations and is not limited to a specific geographicalpositioning.

Furthermore, the single instancing system described herein is notlimited to the hub-and-spoke model implied by the terminology used todiscuss these configurations. For example, a multi-tier hierarchicalconfiguration could be employed, in which computing systems at the leafnodes transfer data to computing systems at their respective parentnodes, which transfer data to computing systems at their parent nodes,and so on, up to the computing system at the top-most node of thehierarchy. As another example, a mesh configuration could be employed,in which a first computing system in the mesh configuration transfersdata to a second computing system, the data to be ultimately transferredto a third computing system.

CDR, also called continuous data protection or continuous backup, refersto copying computer data by automatically saving a copy of every changemade to that data, essentially capturing every version of the data thatthe user saves. It allows an administrator (or other user) to restoredata to previous point(s) in time. There are multiple methods known inthe art for capturing the continuous changes involving differenttechnologies that serve different needs. CDR-based solutions can providefine granularities of restorable objects ranging from disk images tological data objects such as files, email data files, email messages,and database files and logs.

CDR differs from traditional backup or copy operation in that anadministrator (or other user) does not have to specify the point in timeto which the administrator would like to recover until the administratoris ready to perform a restore. Traditional backups or copy operationscan only restore data to the point at which the backup or copy was made.With CDR, there are typically no backup or copy schedules. When data iswritten to disk, it can also be synchronously or asynchronously writtento a second location, usually another computer over the network. In somesituations, CDR will require less space on secondary storage media(usually disk) than traditional backup or copy operations. Most CDRsolutions save byte- or block-level differences rather than file-leveldifferences. This means that if one byte of a 100 GB file is changed,only the changed byte or block is backed up or copied. In contrast,traditional incremental and differential backups and copy operationsgenerally make copies of entire files when those files change.

FIG. 7 illustrates an environment according to the first exampleconfiguration. In the environment of FIG. 7, two remote offices 710 aand 710 b are connected to a home office 730. Although FIG. 7 depictstwo remote offices 710, only a single remote office, or more than tworemote offices, may be connected to the home office 730. Each remoteoffice includes its own single instance database 740. For example,remote office 710 a includes single instance database 740 a and remoteoffice 720 includes single instance database 740 b. Multiple clientcomputing systems 760 a and 760 b at each remote office 710 provide datato the single instance database 740 at their respective locations.

Clients 760 a are part of remote office 710 a, and store data in singleinstance database 740 a. Clients 760 b are part of remote office 710 b,and store data in single instance database 740 b. The clients 760 may beconnected to their respective remote office 710 by way of a local areanetwork (wired or wireless), with the remote offices 710 being connectedto the home office 730 by a wide area network, or other network such asa public computer network (e.g., the Internet). By employing known CDRtechniques, data from each remote single instance database 740 is sentto the home office 730 to be stored in a central data store (not shownin FIG. 7) at the home office 730. Accordingly, data is copied fromclients 760 to a local single instance database 740, and then datablocks unique to that remote office 710 are provided using CDR to createa copy at the home office 730.

Each remote office 710 tracks incremental changes for its clients 760,and then employs CDR to transmit those incremental changes to the homeoffice 730. The home office 730 may then in turn employ its own singleinstance database 790 to avoid any duplication between the remoteoffices 710. For example, clients 760 that run MICROSOFT WINDOWStypically will each have a similar C:\Windows directory containingoperating system files. Multiple client computing systems 760 will havestored a single copy of the C:\Windows directory at the remote singleinstance database 740, which will then be replicated to the central datastore at the home office 730. The home office 730 will in turn store asingle copy of the C:\Windows directory in the single instance database790.

FIG. 8 is a flow diagram that illustrates copying a remote file or dataobject in the environment of FIG. 7. In block 810, the single instancingsystem receives a request to perform a storage operation. For example,the request may be a routinely scheduled request to backup or copy thecontents of a client computing system 760. For each file or data objectinvolved in the request, the single instancing system performs thefollowing blocks. In block 820, the single instancing system copies thefile or data object from the client computing system 760 to a singleinstance database 740 located at the remote office 710. The singleinstance database 740 ensures that only one copy of each file or dataobject is stored.

For example, the single instance database 740 may create or have createda substantially unique identifier for each stored file or data objectand create or have created a substantially unique identifier for eachnew file or data object to be stored. The single instance database 740may then compare the substantially unique identifier of the new file ordata object with that of each previously stored file or data object todetermine whether the new file or data object is already stored. In someembodiments, the single instance database 740 may store metadata that isspecific to some clients while only storing one instance of the file ordata object itself.

Accordingly, the client 760 copies data to a computing system that isgeographically close, and then later the data from each client 760 canbe copied to the home office 730 by copying the single instance orunique data from the single instance database 740 at the remote office710. In this context, computing systems that are geographically closerefers to computing systems that may be in the same room, in the samebuilding or on the same campus. Computing systems that aregeographically remote refers to computing systems that are notgeographically close. In block 830, the single instancing systemreplicates the contents of the remote single instance database 740 tothe home office 730. This block can be performed using CDR or othertraditional methods of copying data. After block 830, these blocksconclude. Using this method, each remote single instance database 740may send identical files or data objects to the home office singleinstance database 790 (i.e., data that is unique as to each individualremote office 710, but duplicative as to both remote offices 710).However, only one instance of each file or data object at the remoteoffice 710 is stored by the home office single instance database 790.

FIG. 9 illustrates an environment according to the second exampleconfiguration. In the environment of FIG. 9, two remote offices 910 aand 910 b are connected to a single home office 930. Although FIG. 9depicts two remote offices 910, only a single remote office, or morethan two remote offices, may be connected to the home office 930. Remoteoffice 910 includes multiple client computing systems 960 a and a datastore 940 a. Remote office 910 b includes multiple client computingsystems 960 b and a data store 940 b. The home office 930 maintains asingle instance database 990. The remote office 910 generates asubstantially unique identifier for each file or data object that is tobe potentially stored.

For example, the remote office 910 may include a computing system (notshown in FIG. 9) that generates the substantially unique identifier foreach file or data object that is to be potentially stored on behalf ofclients 960. The remote office 910 then transmits the substantiallyunique identifier to the home office 930. The home office 930 checks thesingle instancing database 990 to determine whether the transmittedsubstantially unique identifier matches any existing substantiallyunique identifier in the single instance database 990 in order todetermine whether the file or data object that is to be potentiallystored is redundant. The home office 930 then sends a response back tothe remote office 910 that indicates whether the file or data objectthat is to be potentially stored is unique. The remote office 910 storesthe unique files or data objects locally in a data store 940. The remoteoffice 910 then employs CDR to incrementally transfer new changes orupdates to the home office 930.

The single instancing system may employ various optimization techniques.For example, the remote office 910 may cache substantially uniqueidentifiers and only transmit one instance of a substantially uniqueidentifier to the home office 930 if it detects more than one instanceof the same substantially unique identifier. After the single instancingsystem has made a request to the single instance database 990 todetermine if a particular file or data object is unique, the remoteoffice 910 may cache the response so that subsequent identical files ordata objects do not generate a new request to the single instancedatabase 990. Rather, the single instancing system consults the cachefirst to determine if a previous request determined whether the file ordata object is unique. If the cache responds that the file or dataobject is not unique, then the remote office 910 does not need to querythe single instance database 990 to determine if the file or data objectis unique.

FIG. 10 is a flow diagram that illustrates copying a remote file or dataobject in the environment of FIG. 9. In block 1010, the singleinstancing system receives a request to perform a storage operation. Foreach file or other data object involved in the request, the singleinstancing system performs the following blocks. In block 1020, thesingle instancing system copies the file or data object to a datamanagement server (not shown in FIG. 9) that caches files or dataobjects at the remote office 910. Thus, the client copies data to acomputing system that is geographically close. The data managementserver in this method may contain duplicate files or data objects frommany clients 960. According to this method the data management serverdoes not do single instancing of its own.

In block 1030, the single instancing system queries the single instancedatabase 990 at the home office 930 to determine whether the singleinstance database 990 already has a copy of the file or data object. Indecision block 1040, if the file or data object is new to the singleinstance database 990, then the single instancing system continues atblock 1050, else these blocks conclude. In block 1050, the singleinstancing system copies the new file or data object to the singleinstance database 990. If there are duplicates of the file or dataobject, then later when the single instance database 990 is queried forthe duplicate files or data objects, the single instance database 990will indicate that the file or data object is not new and need not becopied. In this way, duplicate data is not sent to the home office 930.After block 1050, these blocks conclude. This method differs from themethod of FIG. 8 in that duplicate data may be stored at the remoteoffice 910, but duplicate data is not sent to the home office 930. Ingeneral, in comparison with the method of FIG. 8, the method of FIG. 10will send more queries to the home office 930, but less data.

FIG. 11 illustrates an environment according to the third exampleconfiguration. In the environment of FIG. 11, each remote client 1160(as opposed to each remote office 1110) transmits a query with asubstantially unique identifier to the home office 1130. Each client1160 may have generated the substantially unique identifier itself, oranother computing system may generate them on behalf of the clients1160. The single instance database 1190 determines whether thesubstantially unique identifier is already stored (i.e., indicating thatthe corresponding file or data object has previously been stored) andtransmits a response to the client 1160. If the response indicates thatthe file or data object is new, then the client 1160 sends that file ordata object to the home office 1130. The single instancing systemtypically does not employ CDR, and each remote office 1110 typicallydoes not include a local data store used by its clients 1160. The singleinstancing system may employ caching for optimization at each client1160. The home office 1130 also uses a single instance database 1190 tostore only a single instance of each file or data object.

FIG. 12 is a flow diagram that illustrates copying a remote file or dataobject in the environment of FIG. 11. In block 1210, the singleinstancing system receives a request to perform a storage operation. Foreach file or other data object involved in the request, the singleinstancing system performs the following blocks. In block 1220, thesingle instancing system queries the single instance database 1190 atthe home office 1130 to determine whether the single instance database1190 already has a copy of the file or data object. In decision block1230, if the file or data object is new to the single instance database1190, then the single instancing system continues at block 1240, elsethese blocks conclude. In block 1240, the single instancing systemcopies the new file or data object directly from the client 1160 to thesingle instance database 1190. In this way, duplicate data is not sentto the home office 1130. After block 1240, these blocks conclude. Thismethod differs from the method of FIG. 10 in that the remote office 110does not employ a remote file cache. Therefore, the method of FIG. 12results in the sending of additional queries from the clients 1160 tothe home office 1130 because each client 1160 will query the singleinstance database 1190.

As shown in FIGS. 7-12, the single instancing system does not alwaysmaintain a single instance database in the same location. Variousbenefits are derived by maintaining a single instance database invarious locations. For example, a single instance database may bemaintained in a production environment (for example, geographicallyclose to production servers) so as to reduce the amount of time neededto single instance data or to reduce the amount of data to betransmitted between computing systems. The data stored in the singleinstance database may then be replicated to another single instancedatabase or secondary storage.

CONCLUSION

From the foregoing, it will be appreciated that specific embodiments ofthe storage system have been described herein for purposes ofillustration, but that various modifications may be made withoutdeviating from the spirit and scope of the invention. For example,although backup operations have been described, the single instancingsystem may be used to reduce many types of redundant storage operations.As one example, the storage system may be employed by an Internet proxyserver to reduce downloading of redundant files over the Internet bytracking a digest of each downloaded file and the location of adownloaded instance of the file behind the proxy server such thatsubsequent requests for the file can be serviced from the previouslydownloaded instance without accessing the file over the Internet.Similarly, the storage system could be used by a file system to reducestorage space by storing a single copy of data placed in multiplelocations throughout the file system.

Unless the context clearly requires otherwise, throughout thedescription and the claims, the words “comprise,” “comprising,” and thelike are to be construed in an inclusive sense, as opposed to anexclusive or exhaustive sense; that is to say, in the sense of“including, but not limited to.” The word “coupled”, as generally usedherein, refers to two or more elements that may be either directlyconnected, or connected by way of one or more intermediate elements.Additionally, the words “herein,” “above,” “below,” and words of similarimport, when used in this application, shall refer to this applicationas a whole and not to any particular portions of this application. Wherethe context permits, words in the above Detailed Description using thesingular or plural number may also include the plural or singular numberrespectively. The word “or” in reference to a list of two or more items,that word covers all of the following interpretations of the word: anyof the items in the list, all of the items in the list, and anycombination of the items in the list.

The above detailed description of embodiments of the invention is notintended to be exhaustive or to limit the invention to the precise formdisclosed above. While specific embodiments of, and examples for, theinvention are described above for illustrative purposes, variousequivalent modifications are possible within the scope of the invention,as those skilled in the relevant art will recognize. For example, whileprocesses or blocks are presented in a given order, alternativeembodiments may perform routines having steps, or employ systems havingblocks, in a different order, and some processes or blocks may bedeleted, moved, added, subdivided, combined, and/or modified. Each ofthese processes or blocks may be implemented in a variety of differentways. Also, while processes or blocks are at times shown as beingperformed in series, these processes or blocks may instead be performedin parallel, or may be performed at different times.

The teachings of the invention provided herein can be applied to othersystems, not necessarily the system described above. The elements andacts of the various embodiments described above can be combined toprovide further embodiments.

While certain embodiments of the inventions have been described, theseembodiments have been presented by way of example only, and are notintended to limit the scope of the disclosure. Indeed, the novel methodsand systems described herein may be embodied in a variety of otherforms; furthermore, various omissions, substitutions and changes in theform of the methods and systems described herein may be made withoutdeparting from the spirit of the disclosure. The accompanying claims andtheir equivalents are intended to cover such forms or modifications aswould fall within the scope and spirit of the disclosure.

What is claimed is:
 1. A system for managing application-generated dataobjects, the system comprising: at least a first de-duplication databaseassociated with first application-specific data, the firstapplication-specific data comprising a plurality of data objects; afirst module comprising one or more computer processors configured toinsert de-duplication indicators in the first application-specific data,wherein the inserted de-duplication indicators are inserted in at leastone header of the first application-specific data, wherein one or moreof the de-duplication indicators comprises an offset value identifying abeginning of at least one of the plurality of data objects within thefirst application-specific data, and wherein the inserted de-duplicationindicators further identify that the first de-duplication database is tobe used in de-duplicating the first application-specific data; a secondmodule executing on one or more computer processors configured toperform block-level de-duplication, the second module further configuredto: use the inserted de-duplication indicators in the at least oneheader to identify the beginning of at least one of the plurality ofdata objects based on the offset value; and determine if a duplicatecopy of any of the blocks associated with the data objects exist in thefirst de-duplication database.
 2. The system of claim 1, wherein thefirst module is configured to identify portions within the plurality ofdata objects to be considered for de-duplication.
 3. The system of claim1, further comprising a third module executing on one or more computerprocessors configured to: parse second application-specific data, thesecond application-specific data comprising a plurality of second dataobjects; identify portions within the plurality of second data objectsto be considered for de-duplication; and insert at least onede-duplication indicator in the second application-specific data thatidentifies at least one location of the identified portions in thesecond data objects to be considered for de-duplication.
 4. The systemof claim 3, wherein the second module is further configured to determinewhether a duplicate copy of any of the blocks associated with the seconddata objects exist in a second de-duplication database.
 5. The system ofclaim 3, wherein the inserted de-duplication indicators in the secondapplication-specific data further identify that the secondde-duplication database is to be used in de-duplicating theapplication-specific data.
 6. The system of claim 3, wherein: the firstde-duplication database is configured to store unique blocks of theidentified portions of the data objects associated with the firstapplication-specific data; and the second de-duplication database isconfigured to store unique blocks of the identified portions of the dataobjects associated with the second application-specific data, whereinthe first de-duplication database is separate and different from thesecond de-duplication database.
 7. The system of claim 3, wherein thede-duplication indicators indicate at least one of the firstde-duplication database and the second de-duplication database.
 8. Thesystem of claim 1, wherein the first application-specific data isassociated with an electronic mail server application.
 9. A method formanaging application-generated data objects, the method comprising:storing a first de-duplication database associated with firstapplication-specific data, the first application-specific datacomprising a plurality of data objects; inserting de-duplicationindicators in at least one header of the first application-specificdata, wherein one or more of the de-duplication indicators comprises anoffset value identifying a beginning of at least one of the plurality ofdata objects within the first application-specific data, and wherein theinserted de-duplication indicators further identify that the firstde-duplication database is to be used in de-duplicating the firstapplication-specific data; using the inserted de-duplication indicatorsin the at least one header to identify the beginning of at least one ofthe plurality of data objects based on the offset value; and determiningif a duplicate copy of any of the blocks associated with the dataobjects exist in the first de-duplication database.
 10. The method ofclaim 9, further comprising identifying portions within the plurality ofdata objects to be considered for de-duplication.
 11. The method ofclaim 9, further comprising: parsing second application-specific data,the second application-specific data comprising a plurality of seconddata objects; identifying portions within the plurality of second dataobjects to be considered for de-duplication; and inserting at least onede-duplication indicator in the second application-specific data thatidentifies at least one location of the identified portions in thesecond data objects to be considered for de-duplication.
 12. The methodof claim 11, further comprising determining whether a duplicate copy ofany of the blocks associated with the second data objects exist in asecond de-duplication database.
 13. The method of claim 11, wherein theinserted de-duplication indicators in the second application-specificdata further identify that the second de-duplication database is to beused in de-duplicating the application-specific data.
 14. The method ofclaim 11, wherein: the first de-duplication database is configured tostore unique blocks of the identified portions of the data objectsassociated with the first application-specific data; and the secondde-duplication database is configured to store unique blocks of theidentified portions of the data objects associated with the secondapplication-specific data, wherein the first de-duplication database isseparate and different from the second de-duplication database.
 15. Themethod of claim 11, wherein the de-duplication indicators indicate atleast one of the first de-duplication database and the secondde-duplication database.
 16. The method of claim 9, wherein the firstapplication-specific data is associated with an electronic mail serverapplication.